package main

import "runtime"

func main() {
	exit := make(chan struct{})
	go func() {
		defer close(exit)
		defer println("a")
		func() {
			 defer func() {
				 println("b", recover() == nil)
			 }()

			  func() {
				 println("c")
				 //立即终止当前任务，运行时确保所有已经注册延迟调用被执行。
				 //该函数不会印象其他并发任务，不会发生panic，自然而无法捕获
				 runtime.Goexit()
				 println("c done.")
			 }()
			 println("b done.")
		 }()
		 println("a done.")
	}()
	<- exit
	println("main exit.")
}
